Een primaire sleutel maken in een bestaande tabel
Home

Een primaire sleutel maken in een bestaande tabel

Een primaire sleutel maken in een bestaande tabel

Als we al bestaande data hebben en deze niet willen verwijderen, maar wel een primaire sleutel willen toevoegen, is dat mogelijk.

Probleem

Soms is het nodig om achteraf, wanneer de tabel reeds gemaakt is, een primaire sleutel toe te voegen.

Oplossing

We voegen een Id kolom toe aan de tabel Boeken die we als primaire sleutel gaan gebruiken.

Om een primaire sleutel toe te voegen aan een reeds bestaande tabel, gebruik je de DDL ALTER instructie in combinatie met een DDL ADD instructie:

ALTER TABLE Boeken ADD Id INT auto_increment PRIMARY KEY;

Je kan ook nagaan of de primaire sleutel is toegevoegd door het volgende statement uit te voeren:

SHOW COLUMNS FROM Boeken;

Het feit dat een kolom een primaire sleutel is, is een CONSTRAINT. Men spreekt van een constraint als iets een beperking is. Als je een rij zou toevoegen met een Id waarvan de waarde reeds in een andere rij bestaat, krijg je een foutmelding. Een ander (en reeds gekend) voorbeeld van een constraint is NOT NULL. Deze constraint is zwakker dan de PRIMARY KEY constraint (omdat NULL niet geschikt is om een rij te identificeren), dus je hoeft ze nooit toe te voegen aan een kolom die dient als primaire sleutel.

AUTO_INCREMENT

Het is beter om de Id door SQL zelf te laten toekennen. Daarvoor gebruik je de eigenschap AUTO_INCREMENT. Als je een nieuwe tabel maakt voeg je de eigenschap toe na de declaratie van de kolom. Zorg ervoor dat je op die kolom een primary key constraint hebt staan:

USE ModernWays;
CREATE TABLE Personen (
    Id int AUTO_INCREMENT PRIMARY KEY,
    Voornaam nvarchar(255) NOT NULL,
    Familienaam nvarchar(255),
    Leeftijd int
);

Je kan de beginwaarde zelf bepalen. Bijvoorbeeld, als je de boeken wil nummeren vanaf 5 in plaats van 1 (de default):

ALTER TABLE Boeken AUTO_INCREMENT = 5;

Dit kan van pas komen als je al wat data hebt en SQL alleen voor de nieuwe data zelf de nummers wil laten genereren.

Primary key constraints verwijderen

Een constraint behoort tot de definitie van de tabel, dus moet je DROP gebruiken (DDL, in de DML gebruik je DELETE om zaken te verwijderen):

use ModernWays;
alter table Boeken drop PRIMARY KEY;

Je kan dus geen kolom verwijderen waarop een (primary) key constraint ligt. Je moet eerst de constraint verwijderen, de identity wijzigen en de constraint terug toe voegen:

alter table Boeken drop primary key;
alter table Boeken drop column Id;

Dan pas kan je de kolom weer toevoegen:

use ModernWays;
ALTER TABLE Boeken ADD Id INT auto_increment PRIMARY KEY;
JI
2018-04-18 15:26:26